USE master
GO

DROP DATABASE cagms
GO

CREATE DATABASE cagms
GO

USE cagms
GO

CREATE SCHEMA gms
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.acl_group (
	acl_id			INT				IDENTITY(1,1)	NOT NULL
	, name			VARCHAR(255)					NOT NULL
	, description	VARCHAR(255)					NULL
	, acl_bits		BIGINT							NOT NULL
	, CONSTRAINT pk_acl_group
		PRIMARY KEY (acl_id)
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.campaign (
	campaign_id			INT				IDENTITY(1,1)	NOT NULL
	, player_id			INT								NOT NULL
	, system_id			INT								NOT NULL
	, name				VARCHAR(100)					NOT NULL
	, description		VARCHAR(255)					NULL
	, is_open			BIT								NOT NULL
	, join_password		VARCHAR(50)						NULL
	, game_notes		TEXT							NULL
	, group_notes		TEXT							NULL
	, CONSTRAINT pk_campaign
		PRIMARY KEY (campaign_id)
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.character (
	player_id				INT				NOT NULL
	, campaign_id			INT				NOT NULL
	, delegate_player_id	INT				NOT NULL
	, unique_id				VARCHAR(32)		NOT NULL
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.flagged_content (
	flag_type		INT				NOT NULL
	, content_id	INT				NOT NULL
	, player_id		INT				NOT NULL
	, reason		VARCHAR(255)	NULL
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.game_system (
	system_id		INT				IDENTITY(1,1)	NOT NULL
	, name			VARCHAR(100)					NOT NULL
	, plugin_ns		VARCHAR(255)					NOT NULL
	, version		DECIMAL							NOT NULL
	, CONSTRAINT pk_game_system
		PRIMARY KEY	(system_id)
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.join_request (
	campaign_id		INT				NOT NULL
	, player_id		INT				NOT NULL
	, submit_text	VARCHAR(255)	NULL
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.opcode (
	opcode_id			INT				IDENTITY(1,1)	NOT NULL
	, code_name			VARCHAR(50)						NOT NULL
	, code_type			INT								NOT NULL
	, code_execution	VARCHAR(255)					NOT NULL
	, args				VARCHAR(255)					NULL
	, CONSTRAINT pk_opcode
		PRIMARY KEY (opcode_id)
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.player (
	player_id		INT				IDENTITY(1,1)	NOT NULL
	, first_name	VARCHAR(100)					NOT NULL
	, last_name		VARCHAR(100)					NULL
	, email			VARCHAR(255)					NOT NULL
	, password		BINARY(64)						NOT NULL
	, salt			BINARY(32)						NOT NULL
	, address		VARCHAR(15)						NOT NULL
	, CONSTRAINT pk_player
		PRIMARY KEY (player_id)
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.player_acl_group (
	player_id	INT		NOT NULL
	, acl_id	INT		NOT NULL
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.player_campaign (
	player_id		INT				NOT NULL
	, campaign_id	INT				NOT NULL
	, gm_notes		VARCHAR(255)	NULL
	, campaign_acl	INT				NOT NULL
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.player_reset (
	id_code			VARCHAR(128)	NOT NULL
	, confirm_code	VARCHAR(25)		NOT NULL
	, player_id		INT				NOT NULL
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.player_signup (
	id_code			VARCHAR(128)	NOT NULL
	, first_name	VARCHAR(100)	NOT NULL
	, last_name		VARCHAR(100)	NULL
	, email			VARCHAR(255)	NOT NULL
	, password		BINARY(64)		NOT NULL
	, salt			BINARY(32)		NOT NULL
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

CREATE TABLE gms.resource_file (
	res_file_id		BIGINT			IDENTITY(1,1)	NOT NULL
	, campaign_id	INT								NOT NULL
	, player_id		INT								NOT NULL
	, name			VARCHAR(100)					NOT NULL
	, description	VARCHAR(255)					NULL
	, CONSTRAINT pk_res_file
		PRIMARY KEY (res_file_id)
)
GO

-- ##############################################################################################
-- ##############################################################################################
-- ##############################################################################################

INSERT INTO gms.player (first_name, last_name, email, password, salt, address) 
VALUES (N'Admin', N'McAdminerson', N'killean@shaw.ca', 0xDCDCD514C4286BD737E404E71CFEF9FD8D6E87F769F8DB7ABEF7DBF7ACF1E8207844E9C0FD647944F64DCE163D7D94C00ED027CF998ECBCAF56C147BBB625302, 0x4F90F24B7E0DA1B2C28696539B677C2B57E1BE32576696BF6140FCECEF95FA95, N'24.76.190.115')

INSERT INTO gms.player (first_name, last_name, email, password, salt, address) 
VALUES (N'Kirk', N'Fierback', N'kaptainkirk28@gmail.com', 0xD60DE3397D93BC9DB8F714D3F6B2BF295866F81E64EC2132F6AD9C58098F79B9BEB2EDD2663F41209680929E013EA7F36ED1BE90B7172714DCE38A5B790CA9B9, 0x09086637EB3F7D0FF56F0E15956AB434107C285BD39F8B14E742B67B597944D8, N'24.76.168.254')

INSERT INTO gms.opcode (code_name, code_type, code_execution, args)
VALUES (N'example', 0, N'gms.pr_does_not_exist', N'arg_id')